package main.proyecto_pei;

import java.util.ArrayList;

import utilities.AlertaData;
import utilities.BDSQLiteHelper;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class VerAlertas extends Activity{
	ListView listView;
	int idActiva=-1;//En esta variable guardaremos el id de la alra activa que leemos de la BD
				//para luego solo setearla a false y agregar a true la nueva alerta
    private ArrayList<AlertaData> alertas = new ArrayList<AlertaData>();

    @Override
	public void onConfigurationChanged(Configuration newConfig) {
	    super.onConfigurationChanged(newConfig);
	}
    
	@Override
	public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.detalle_alertas);
    	listView = (ListView)findViewById(R.id.ListAlertas);
    	
    	getAlertas();
		AdaptadorAlarmas adaptador = new AdaptadorAlarmas(this);
		listView.setAdapter(adaptador); 
        
	}


	/********************************************************************/
	/**						FUNCIONES DE BOTONES						*/
	/********************************************************************/

	public void onClickRegresarAlertas(View v){
		Intent principal = new Intent();
		guardarAlarmaDB();
		principal.setClass(this,Calculos.class);
		finish();
	}

	@Override
    public boolean onKeyDown(int keyCode, KeyEvent event){   
    	
    	if(keyCode == KeyEvent.KEYCODE_BACK){
    		onClickRegresarAlertas(null);
    		return true;
    	}
		return super.onKeyDown(keyCode, event);
    }
	
	
	/********************************************************************/
	/**								ADAPTADOR							*/
	/********************************************************************/
	
	@SuppressWarnings("rawtypes")
	class AdaptadorAlarmas extends ArrayAdapter {
    	
    	Activity context;
    
		@SuppressWarnings("unchecked")
		AdaptadorAlarmas(Activity context) {
    		super(context, R.layout.listitem_dataalerta, alertas);
    		this.context = context;
    	}
		
		@Override
		public int getCount() {
    		return alertas.size();
    	}
    	 
    	@Override
		public String getItem(int position) {
    		return alertas.get(position).toString();
    	}
    	 
    	@Override
		public long getItemId(int position) {
    		return position;
    	}
    	
    	@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			LayoutInflater inflater = context.getLayoutInflater();
			String sonido,vibrar;
			View item = inflater.inflate(R.layout.listitem_dataalerta, null);
			TextView lblMensaje = (TextView)item.findViewById(R.id.LblMsjs);
			lblMensaje.setText(alertas.get(position).getMensaje());
			TextView lblDetalle = (TextView)item.findViewById(R.id.LblDet);
			RadioButton rb = (RadioButton)item.findViewById(R.id.rbActivaAlarma);
			ImageView imgv = (ImageView)item.findViewById(R.id.btnDeleteAlerta);

			//Si es el elemento "Ninguno, no se podra borrar"
			if(alertas.get(position).getId() != -1){
				imgv.setOnClickListener(new OnClickListener() {
			        public void onClick(View v) {
			            eliminarAlerta(position);
			        }
			    });
			}
			else imgv.setImageBitmap(null);
			
			if(alertas.get(position).isVibrar()) vibrar = "Si";
			else vibrar ="No";
			if(alertas.get(position).getSonido()!=null){
				switch (alertas.get(position).getSonido()) {
					case R.raw.extreme_clock_alarm: sonido = getString(R.string.lblSonidoExtremeAlarm);
					break;
					case R.raw.iphone_alarm: sonido = getString(R.string.lblSonidoIhponeAlarm);
					break;
					case R.raw.nuclear_alarm: sonido = getString(R.string.lblSonidoNuclearAlarm);
					break;
					case R.raw.super_alarm: sonido = getString(R.string.lblSonidoSuperAlarm);
					break;
					case R.raw.sweet_wake_up: sonido = getString(R.string.lblSonidoSweetWakeup);
					break;
					case R.raw.zelda: sonido = getString(R.string.lblSonidoZelda);
					break;
					case -1:sonido = getString(R.string.lblSonidoDefault);
					break;
					default: sonido="No";
				}
			}
			else sonido ="No";
			lblDetalle.setText("Vibrar: "+vibrar+"   Sonido: "+sonido);
			if(alertas.get(position).isActivo()) rb.setChecked(true);
			else  rb.setChecked(false);
			
			rb.setOnCheckedChangeListener(new OnCheckedChangeListener(){
    			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
	    			for(int i=0; i<alertas.size();i++)
	    				alertas.get(i).setActivo(false);
	    			buttonView.setChecked(true);
	    			alertas.get(position).setActivo(true);
	    			listView.setAdapter(new AdaptadorAlarmas(VerAlertas.this));
    	        }
		    });
			return(item);
		}

		protected void eliminarAlerta(final int position) {
			AlertDialog dialog;
			
			AlertDialog.Builder builder = new AlertDialog.Builder(VerAlertas.this);
			builder.setTitle("Eliminar Registro");
			builder.setIcon(R.drawable.warning);
			builder.setMessage("Desea eliminar el registro seleccionado?")
			.setCancelable(false)
			
			.setPositiveButton("Si", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int id) {
					eliminarAlertaDB(alertas.get(position).getId());
					if(alertas.get(position).isActivo()){//Si la alerta a eliminar esta activa, setiamos por defecto NINGUNA
						alertas.get(0).setActivo(true);//en la posicion cero por defecto esta NINGUNA
					}
					alertas.remove(position);
					listView.setAdapter(new AdaptadorAlarmas(VerAlertas.this));
				}
			})
			
			.setNegativeButton("No", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int id) {
					dialog.cancel();
				}
				});
			dialog = builder.create();
			dialog.show();
			
		}
	}
	
	/********************************************************************/
	/**						FUNCIONES DE VARIAS							*/
	/********************************************************************/

	private void getAlertas() {
		BDSQLiteHelper usdbh = new BDSQLiteHelper(this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		//Elemento logico que no se almacena en la BD y que sirve para no activar ninguna alarma
		//Por defecto esta es la activa, si en la lectura de la BD encontramos una activa ponemos esta a false
		alertas.add(new AlertaData(-1, "Ninguna", true, -6, false));
		try {
			db = usdbh.getReadableDatabase();
			Cursor c = db.query("PEI_ALERTA", new String[] {"ID_ALERTA","MENSAJE","IS_ACTIVO","SONIDO","VIBRAR"}, null, null, null, null, null);
			while(c.moveToNext()){
				alertas.add(new AlertaData(Integer.parseInt(c.getString(0)),//id
											c.getString(1),//mensaje
											(Integer.parseInt(c.getString(2)) == 1) ,//is_activo
											(Integer.parseInt(c.getString(3))), //sonido
											(Integer.parseInt(c.getString(4)) == 1) //vibrar
											));
				if(Integer.parseInt(c.getString(2))==1) 
					idActiva=Integer.parseInt(c.getString(0));
				
			}
			if(idActiva!=-1){
				//Si encontramos una activa, ponemos inactiva la opcion NINGUNA que esta en la posicion 0
				alertas.get(0).setActivo(false);
			}
		} catch (Exception e) {
			e.printStackTrace();
			Log.i("ERROR CARGARALERTA", e.getMessage());
		}
		finally{
			db.close();
		}

	}
	
	protected void eliminarAlertaDB(int id) {
		BDSQLiteHelper usdbh = new BDSQLiteHelper(VerAlertas.this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		try {
			db = usdbh.getReadableDatabase();
			db.execSQL("DELETE FROM PEI_ALERTA WHERE ID_ALERTA='"+id+"';");
		} catch (Exception e) {
			e.printStackTrace();
			Log.i("ERROR ELIMINARALERTA", e.getMessage());
		}
		finally{
			db.close();
		}
	}

	private void guardarAlarmaDB() {
		BDSQLiteHelper usdbh = new BDSQLiteHelper(VerAlertas.this, "DB_PEI", null, 1);
		SQLiteDatabase db = null;
		int i;
		try {
			db = usdbh.getWritableDatabase();
			
			if(alertas.get(0).isActivo()){//Si esta activo NINGUNA seteamos a inactiva la que estaba activa en la BD
				db.execSQL("UPDATE PEI_ALERTA SET IS_ACTIVO=0;");
			}
			else{
				for(i=0; i<alertas.size();i++) if(alertas.get(i).isActivo()) break;
				db.execSQL("UPDATE PEI_ALERTA SET IS_ACTIVO='0' WHERE ID_ALERTA='"+idActiva+"';");//desactivamos la que estaba seleccionaba en la BD
				db.execSQL("UPDATE PEI_ALERTA SET IS_ACTIVO='1' WHERE ID_ALERTA='"+alertas.get(i).getId()+"';");//Activamos la que queda seleccionada en el listview
			}
		} catch (Exception e) {
			e.printStackTrace();
			Log.i("ERROR GUARDARALERTA", e.getMessage());
		}
		finally{
			db.close();
		}
			
	}
		


	
	public static class ViewHolder {
		public RadioButton rbbutton;
	}

}
